const express = require("express")
const multer = require("multer")
const path = require("path")
const { join } = require("path")
const journalDB = require("../../../../db/journal")
const fs = require("fs")
const router = express.Router()
const { sensitiveVer } = require('../../../../utils/sensitiveVerification')

// 日志的各种修改
// 权限判断
router.use((req, res, next) => {
  if (!req.session.userInfo.allowUpdate) {
    return res.send({
      code: 15,
      mes: "您没有修改权限，请联系超级管理员进行添加"
    })
  }
  next()
})


// 上传md文件
let mdUpload = multer({
  storage: multer.diskStorage({
    // 文件存储的目录
    destination(req, file, cb) {
      cb(null, join(__dirname, "../../../../static/journal/md"))
    },
    // 文件的名字
    filename(req, file, cb) {
      let name = req.session.userInfo._id
      let ext = path.extname(file.originalname)
      req.mdFile = "journal" + name + Date.now() + ext
      cb(null, req.mdFile)  //名字
    }
  })
}).single("file") //name名字 elemetUI默认为file

// 上传cover文件
let coverUpload = multer({
  storage: multer.diskStorage({
    // 文件存储的目录
    destination(req, file, cb) {
      cb(null, join(__dirname, "../../../../static/journal/cover"))
    },
    // 文件的名字
    filename(req, file, cb) {
      let name = req.session.userInfo._id
      let ext = path.extname(file.originalname)
      req.coverFile = "journal" + name + Date.now() + ext
      cb(null, req.coverFile)  //名字
    }
  })
}).single("file") //name名字 elemetUI默认为file

// 更新日志标题和描述
router.post("/update", async (req, res) => {
  try {
    // 权限判断
    router.use((req, res, next) => {
      if (!req.session.userInfo.allowUpdate) {
        return res.send({
          code: 15,
          mes: "您没有修改权限，请联系超级管理员进行添加"
        })
      }
      next()
    })
    let { _id, title, des, mtime } = req.body
    // 判断日志是否存在
    let doc = await journalDB.findById(_id)

    if (!doc) {
      return res.send({
        code: 9,
        mes: "该日志已被删除，请刷新后重试"
      })
    }

    await sensitiveVer(title)
    await sensitiveVer(des)

    await journalDB.findByIdAndUpdate(_id, {
      title,
      des,
      mtime
    })
    res.send({
      code: 0,
      mes: "修改成功"
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: error || "服务器异常，请稍后再试"
    })
  }
})

// 更新日志中的cover文件
router.post("/updateCover", (req, res) => {
  try {
    coverUpload(req, res, async err => {
      let { _id } = req.body
      let doc = await journalDB.findById(_id)
      // 检测相应日志是否存在
      if (!doc) {
        return res.send({
          code: 9,
          mes: "该日志已被删除，请刷新后重试"
        })
      }
      // 检测是否上传成功
      if (err) {
        return res.send({
          code: 8,
          mes: "md文件上传失败,请刷新后重试"
        })
      }
      // 删除旧文件
      doc.cover.forEach(item => {
        fs.rm(join(__dirname, "../../../../static" + item), { recursive: true }, err => {
          if (err) return
        })
      })
      // 更改数据库  //删除
      await journalDB.findByIdAndUpdate(_id, {
        $pop: { cover: -1 },
        mtime: Date.now(),
      })
      // 更改数据库  //添加
      await journalDB.findByIdAndUpdate(_id, {
        $push: {
          cover: "/journal/cover/" + req.coverFile
        },
        mtime: Date.now(),
      })
      res.send({
        code: 0,
        mes: "封面图已更新"
      })

    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试"
    })
  }
})

// 更新日志md文件
router.post("/updateMd", (req, res) => {
  try {
    // 上传md文件
    mdUpload(req, res, async err => {
      // 判断日志是否存在
      let { _id, md } = req.body
      let doc = await journalDB.findById(_id)
      // 日志不存在
      if (!doc) {
        return res.send({
          code: 9,
          mes: "该日志已被删除，请刷新后重试"
        })
      }
      // 判断上传是否成功
      if (err) {
        return res.send({
          code: 8,
          mes: "md文件上传失败,请刷新后重试",
          data: err
        })
      }
      // 删除原本的md文件
      fs.rm(join(__dirname, "../../../../static" + md), { recursive: true }, err => {
        if (err) return
      })
      // 修改数据库中md文件路径
      await journalDB.findByIdAndUpdate(_id, {
        md: "/journal/md/" + req.mdFile,
        mtime: Date.now()
      })
      res.send({
        code: 0,
        mes: "md文件已更新",
      })
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试"
    })
  }
})






module.exports = router